﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ecommerce.Model;

namespace Ecommerce.Web.Cliente
{
    public partial class DetalhePedido : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                int idtPedido = 0;

                if (Request.QueryString["idtPedido"] != null)
                {
                    idtPedido = Convert.ToInt32(Request.QueryString["idtPedido"]);
                    this.CarregarPedido(idtPedido);
                }
            }
        }

        private void CarregarPedido(int identificadorPedido)
        {
            var pedido = PedidoModel.Instance.Obter(identificadorPedido);
     
            lblNumPedido.Text = pedido.ped_idt_pedido.ToString();
            lblStatusPedido.Text = pedido.tb_spl_status_pedido_log.Last().tb_spe_status_pedido.spe_des_status_pedido;
            lblDtPedido.Text = pedido.ped_dat_criacao.Value.ToShortDateString();
            var vlrSubTotal = pedido.ped_vlr_total_pedido - pedido.ped_vlr_frete;
            lblVlrSubtotal.Text = vlrSubTotal.Value.ToString("c");
            lblVlrFrete.Text = pedido.ped_vlr_frete.Value.ToString("c");
            lblValorTotal.Text = pedido.ped_vlr_total_pedido.Value.ToString("c");

            //Dados de endereço de entraga
            var endereco = pedido.tb_ien_informacao_envio.First().tb_end_endereco;
            lblLogradouro.Text = endereco.end_nom_logradouro;
            lblNumero.Text = endereco.end_num_endereco.ToString();
            lblBairro.Text = endereco.end_des_bairro;
            lblCidade.Text = endereco.end_nom_cidade;
            lblEstado.Text = endereco.end_sig_uf;
            lblCEP.Text = endereco.end_num_cep;

            //Dados de envio
            var informacaoEnvio = pedido.tb_ien_informacao_envio.First();

            lblFormaPagamento.Text = pedido.tb_tpa_tipo_pagamento.tpa_des_tipo_pagamento;

            if (informacaoEnvio.ien_dat_envio_pedido.HasValue)
                lblEnviadoEm.Text = informacaoEnvio.ien_dat_envio_pedido.Value.ToShortDateString();
            else
                lblEnviadoEm.Text = "Pedido não enviado";
            
            lblPesoTotal.Text = this.ObterPesoToralPedido(pedido).ToString() + " kg";

            lblFormaEnvio.Text = PessoaJuridicaModel.Instance.Obter(informacaoEnvio.tra_idt_transportadora).pju_des_nom_fantasia;

            if(informacaoEnvio.ien_dat_recebimento_pedido.HasValue)
                lblRecebidoEm.Text = informacaoEnvio.ien_dat_recebimento_pedido.Value.ToShortDateString();
            else
                lblRecebidoEm.Text = "Pedido não entregue";

            if (String.IsNullOrEmpty(informacaoEnvio.ien_cod_rastreamento))
                lblNumRastreio.Text = "Sem número de rastreamento";
            else
                lblNumRastreio.Text = informacaoEnvio.ien_cod_rastreamento;

            //Carrega os produtos
            rptProdutos.DataSource = pedido.tb_ipe_item_pedido;
            rptProdutos.DataBind();
        }

        private decimal ObterPesoToralPedido(tb_ped_pedido pedido)
        {
            decimal pesoTotal = 0;
            foreach (tb_ipe_item_pedido item in pedido.tb_ipe_item_pedido)
            {
                pesoTotal += item.tb_pro_produto.pro_vlr_peso.Value;
            }
            return pesoTotal;
        }

        protected void rptProdutos_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var item = (tb_ipe_item_pedido)e.Item.DataItem;

                Label lblNomeProd = (Label)e.Item.FindControl("lblNomeProd");
                Label lblPrecoProd = (Label)e.Item.FindControl("lblPrecoProd");
                Label lblQtdProd = (Label)e.Item.FindControl("lblQtdProd");
                Label lblVlrTotalProd = (Label)e.Item.FindControl("lblVlrTotalProd");
                
                lblNomeProd.Text = item.tb_pro_produto.pro_nom_produto;
                lblPrecoProd.Text = item.ipe_vlr_item.ToString("c");
                lblQtdProd.Text = item.ipe_qtd_item_pedido.ToString();

                var total = item.ipe_vlr_item * item.ipe_qtd_item_pedido;
                lblVlrTotalProd.Text = total.ToString("c");
            }
        }
    }
}